package parserjc.jaccie;

import java.util.*;

/**
* Enth&auml;lt die Daten eines Attributes, die zum Evaluieren ben�tigt werden.
* Aus Effizienzgr&uuml;nden finden sich hier auch die Regel, der Baumknoten
* usw.
*/
public class StackAttribute {

    private EvaluatorTree tree;
    private String name;
    private String rule;
    private Vector attribute;
    private int number = 0;
    private String selfName;
    private String selfRule;

	/**
    * Erstellt ein neues Attribut, mit weiteren Informationen.
    * @param name - Realer Name des Attributes (mit Nummerierung)
    * @param attribute - der Vector des einfachen Attributes
    * @param rule - die dazugeh�rige Regel (mit Nummerierung)
    * @param tree - der Baumknoten, der das Attribut enth&auml;lt
    * @param number - Nummer des Attributes im Knoten
    */
    public StackAttribute(String name, Vector attribute, String rule,
        EvaluatorTree tree, int number) {
        this.name = name;
        this.attribute = attribute;
        this.rule = rule;
        this.tree = tree;
        this.number = number;
    }
    public String getRule() {return rule;}
    public String getRealName() {return name;}
    public String getName() {return (String)attribute.elementAt(0);}
    public String getType() {return (String)attribute.elementAt(1);}
	public String getState() {return (String)attribute.elementAt(2);}
    public Object getValue() {return attribute.elementAt(3);}
    public EvaluatorTree getTree() {return tree;}
    public int getNumber() {return number;}
    public String getSelfName() {return selfName;}
    public String getSelfRule() {return selfRule;}

	public void setState(String state) {attribute.setElementAt(state,2);}
	public void setValue(Object value) {attribute.setElementAt(value,3);}
    public void setSelfName(String selfName) {this.selfName = selfName;}
    public void setSelfRule(String selfRule) {this.selfRule = selfRule;}

    public String toString() {
        return "{"+name+","+attribute+","+rule+","+number+","+
                   selfName+","+selfRule+","+tree.getAddress()+"}";
    }
}
